package com.atguigu.gmall.feign.list;


import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.list.Goods;
import com.atguigu.gmall.model.list.SearchParam;
import com.atguigu.gmall.model.list.SearchResponseVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

@RequestMapping("/api/inner")
@FeignClient("service-list")
public interface GoodsFeignClient {


    /**
     * 商品上架
     * @param goods
     * @return
     */
    @PostMapping("/onsale/goods")
    Result onSaleGoods(@RequestBody Goods goods);


    /**
     * feign怎么判断要调用远程哪个方法？
     * GoodsFeignClient.abc();
     * 1、先看GoodsFeignClient需要调用哪个微服务 service-list
     * 2、去注册中心，要到 service-list 真正服务器 ip:port
     * 3、给 ip:port 发送 请求。 /api/inner/canclesale/goods/{skuId}； 是由@RequestMapping+@DeleteMapping拼接的
     * 4、远程服务收到请求。 启动能处理这个请求的Controller的目标方法即可
     *
     * 使用feign只有一个要求。feign要去的远程请求必须路径一样；请求方式+请求路径一样就能发过去请求
     *
     * 扩展：
     *  1、feign能不能调用 baidu.com  能；
     *  所有的http，feign都可以调用；
     *
     *
     * @param skuId
     * @return
     */
    @DeleteMapping("/canclesale/goods/{skuId}")
    Result cancleSaleGoods(@PathVariable("skuId")Long skuId);


    /**
     * 按照指定条件，检索所有商品
     * @param param
     * @return
     */
    @PostMapping("/search/goods")
    SearchResponseVo searchGoods(@RequestBody SearchParam param);

    @PutMapping("/updatescore/{skuId}/{score}")
    Result updateGoodsHotScore(@PathVariable("skuId") Long skuId,
                                      @PathVariable("score") Long score);

}
